//
//  SHHMyLayout.swift
//  GoTravel
//
//  Created by lanou3g on 16/3/10.
//  Copyright © 2016年 SHH. All rights reserved.
//

import UIKit

class SHHMyLayout: UICollectionViewFlowLayout {
    
    var array = Array<UICollectionViewLayoutAttributes>()
    var itemCount = Int()
    
    override func prepareLayout() {
        super.prepareLayout()
        //计算每一个item的宽度
        let kWidth = (UIScreen.mainScreen().bounds.size.width - self.sectionInset.left - self.sectionInset.right - self.minimumInteritemSpacing)/2
        //定义数组保存每一列的高度
        //这个数组的主要作用是保存每一列的总高度，这样在布局时，我们可以始终将下一个item放在最短的列下
        var colHight:Array<CGFloat> = [self.sectionInset.top,self.sectionInset.bottom]
        //itemCount是外界传进来的个数
        for var i=0; i<itemCount; i++ {
            //设置每个Item的相关属性
            let index:NSIndexPath = NSIndexPath(forItem: i, inSection: 0)
            //创建一个布局属性类，通过indexPath来创建
            let attris = UICollectionViewLayoutAttributes(forCellWithIndexPath: index)
            //随机一个高度，在40-190之间
            let hight = 150
            //哪一列高度小，则放到那一列下面
            //标记最短的列
            var width = 0
            if colHight[0]<colHight[1] {
                colHight[0] = colHight[0] + CGFloat(hight) + self.minimumLineSpacing
                width = 0
            }else{
                colHight[1] = colHight[1] + CGFloat(hight) + self.minimumLineSpacing
                width = 1
            }
            
            //设置item位置
            attris.frame = CGRectMake(self.sectionInset.left + (self.minimumInteritemSpacing+kWidth*CGFloat(width)), colHight[width] - CGFloat(hight) - self.minimumLineSpacing, kWidth,CGFloat(hight))
            array.append(attris)
        }
        //设置itemSize来确保滑动范围的正确，这里是通过将所有的item高度平均化，计算出来的（以最高的列为标准）
        if colHight[0] > colHight[1] {
            self.itemSize = CGSizeMake(kWidth, (colHight[0] - self.sectionInset.top)*2/CGFloat(itemCount)-self.minimumLineSpacing)
        }else{
            self.itemSize = CGSizeMake(kWidth, (colHight[1] - self.sectionInset.top)*2/CGFloat(itemCount)-self.minimumLineSpacing)
        }
    }
    
    override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {
        return true
    }
    
    //返回我们布局的数组
    override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        return array
    }

}
